import java.util.Arrays;
import java.util.TreeMap;
import java.util.Map;

public class Mapdemo1 {
    public static void main(String[] args) {
        Map<String, String> treeMap = new TreeMap<>();
        treeMap.put("林冲", "豹子头");
        treeMap.put("鲁智深", "花和尚");
        treeMap.put("武松", "行者");
        treeMap.put("宋江", "及时雨");
        String str = treeMap.put("李逵", "黑旋风");
        System.out.println(treeMap.size());
        System.out.println(treeMap);
        System.out.println(str);

        // put(key,value): 注意key不能为空，但是value可以为空
        // key如果为空，会抛出空指针异常
        //treeMap.put(null, "花名");     这里会抛出异常
        treeMap.put("无名", null);
        System.out.println(treeMap.size());

        // put(key, value):
        // 如果key存在，会使用value替换原来key所对应的value，返回旧value
        treeMap.put("李逵", "铁牛");
        System.out.println(treeMap);

        // get(key): 返回key所对应的value
        // 如果key存在，返回key所对应的value
        // 如果key不存在，返回null
        System.out.println(treeMap.get("鲁智深"));
        System.out.println(treeMap.get("史进"));
        System.out.println("***************************");

        //GetOrDefault(): 如果key存在，返回与key所对应的value，如果key不存在，返回一个默认值
        System.out.println(treeMap.getOrDefault("李逵", "铁牛"));
        System.out.println(treeMap.getOrDefault("史进", "九纹龙"));

        //containKey(key)：检测key是否包含在Map中，时间复杂度：O(logN)
        // 按照红黑树的性质来进行查找
        // 找到返回true，否则返回false
        System.out.println(treeMap.containsKey("林冲"));
        System.out.println(treeMap.containsKey("史进"));

        // 打印所有的key
        // keySet是将map中的key防止在Set中返回的
        for(String s : treeMap.keySet()){
            System.out.print(s + " ");
          }
        System.out.println();
          System.out.println("********************************");
          // 打印所有的value
          // values()是将map中的value放在collect的一个集合中返回的
          for(String s : treeMap.values()){
           System.out.print(s + " ");
           }
              System.out.println();
          // 打印所有的键值对
          // entrySet(): 将Map中的键值对放在Set中返回了
          for(Map.Entry<String, String> entry : treeMap.entrySet()){
            System.out.println(entry.getKey() + "--->" + entry.getValue());
              }
          System.out.println();

}

    }

